//
//  LSUserAccount.swift
//  新浪微博---01次
//
//  Created by 李宗帅 on 16/5/5.
//  Copyright © 2016年 LS. All rights reserved.
//

import UIKit

class LSUserAccount: NSObject {

//    access_token	string	用户授权的唯一票据，用于调用微博的开放接口，同时也是第三方应用验证微博用户登录的唯一票据，第三方应用应该用该票据和自己应用内的用户建立唯一影射关系，来识别登录状态，不能使用本返回值里的UID字段来做登录识别。
        //后台写接口数据类型写错了
    var access_token: String?
//    expires_in	string	access_token的生命周期，单位是秒数。
//    把秒数转化成时间  不然的话本来是多少时间 归档之后 没有进行计时功能  转换成时间之后 跟当前时间进行比较久可以判断有没有在有效期了
    //当外界给expires_in赋值的时候  就会调用这个属性的didset方法 这个时候我们转换成时间
    var expires_in: NSTimeInterval = 0{
        didSet{
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    //定义一个时间属性
    var expires_date:NSDate?
//    remind_in	string	access_token的生命周期（该参数即将废弃，开发者请使用expires_in）。
//    uid	string	授权用户的UID，本字段只是为了方便开发者，减少一次user/show接口调用而返回的，第三方应用不能用此字段作为用户登录状态的识别，只有access_token才是用户授权的唯一票据。
    var uid:String?
    
    /// screen_name	string	用户昵称
    var screen_name: String?
    ///profile_image_url	string	用户头像地址（中图），50×50像素
    var profile_image_url: String?
    
    init(dic: [String: AnyObject]) {
        super.init()
        
        setValuesForKeysWithDictionary(dic)
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //MARK:-- 归档和接档
    // 归档 -- 将对象保存成二进制保存在沙盒里
    func encodeWithCoder(aCoder: NSCoder) {
        
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expires_date, forKey: "expires_date")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
        aCoder.encodeObject(profile_image_url, forKey: "profile_image_url")
    }
    
    // 接档 - 从沙盒里读取数据，把二进制转换成对象
    required init?(coder aDecoder: NSCoder) {
        
        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
        self.expires_date = aDecoder.decodeObjectForKey("expires_date") as? NSDate
        
        //在Xcode7bate3之后  会默认调用super.init
        //但是还是建议大家写
        super.init()
        
    }
    
    //创建一个读取沙盒归档文件的方法
    class func readUserAccont() ->LSUserAccount? {
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        // 2. 拼接文件的路径
        // swift 中的String 可以灵活的转换成 NSSring，转换之后可以掉用OC里 的方法
        let filePath = (path as NSString).stringByAppendingPathComponent("info.aaa")
        
        let count = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? LSUserAccount
        
        //读取到用户数据之后  需要把时间拿出来,进行一下判断 因为授权有一定的时效性,
        //if  时间在有效期内 就返回count  else 不在有效期 重新请求
        
        if let date = count?.expires_date {
            //时间比较
            //什么是升序  什么是降序
//            printLog("wwwww\(date)")
            if date.compare(NSDate()) == NSComparisonResult.OrderedDescending{
                
                //如果时间是降序
                return count
            } else {
                //升序
                return nil
            }
        }
        return count
    }
    
}
